package com.nenude.corejava.ch7.abs;

/**
 * 
 * <pre>
 *  1.使用abstract 修饰的方法叫抽象方法，抽象方法没有方法体（没有大括号）
 *  2、一个类如果包含抽象方法，则这个类必须是抽象类；
 *   注意：抽象类不一定包含抽象方法。即抽象类可以不包含抽象方法；
 *   3、在抽象类中，可以同时包含抽象方法和非抽象方法；
 *   4、抽象类不能使用new 关键词进行实例化；
 *   5、子类必须实现或重写父类定义的抽象方法，
 *   即当需要子类重写或实现方法时，可以把特定的方法声明为抽象方法（对应的类就是抽象类）；
 *   6、一个子类继承了一个抽象类，也会继承该父类的抽象方法
 *   7、抽象方法语法结构：修饰符号 abstract 返回值类型 （参数列表）；没有方法体
 *   8、使用abstract 修饰的类叫抽象类；抽象类不能进行实例化；
 *   9、抽象方法不能使用private 关键词进行修饰，其它三个访问修饰符号可以修饰；
 *   10、抽象方法不能使用static 关键词进行修饰；
 *   11、抽象方法不能使用fianl 关键词进行修饰；final 方法不能被重写；
 *   12、final 和abstract 不能同时修饰类；
 *   13、使用final 修饰的类称为终止类（不能有子类），终止不能被继承，不能被继承
 *    @author huanghailing
 *    
 *    14、使用final 修饰的“变量”，称为常量；
 *      常量：在运算过程中，不能被修改的“变量”（不变的变量）
 *    
 *    
 * </pre>
 *
 */
 public abstract class AbstractClass {
	//属性常量需要在定义时进行初始化；常量一旦被初始化，就不能够被修改；
	//属性常量如果在定义时，没有进行初始化，则可以在构造方法中初始化一次；
	private final  int id;
	private  final String name;
	
	//类属性（使用static 修饰的属性）必须在定义的时候初始化，一旦被初始化，则不能被修改（引用不能被修改）；
     private static final String MAN="男";

	public AbstractClass() {
		super();
		this.id=0;
		this.name="";
	
	}
	
	//final 修饰被局部变量或参数，不能被修改；
	public AbstractClass(final int id, final String name) {
		super();
		 final int  d;
         d=12;	
         //d=13; 错误，局部常量一旦被赋值，则不能进行修改；
		this.id = id;
		this.name = name;
	}
	

	public abstract void absMeth();
	
	//使用final 修饰的方法称为终止方法，终止（终结）方法不能被重写；
	public final  void prin() {
		System.out.println("打印方法");
	}
	
	
	public static void main(String[] args) {
		//抽象类一般由抽象的子类进行实例化，多态编程的应用
		SubabstractClass abstractClass=new SubabstractClass();
		abstractClass.absMeth();
	}

}
